home *** CD-ROM | disk | FTP | other *** search
/ Amiga Tools 2 / Amiga Tools 2.iso / amiga-magazin-pd / 03-95-2 / einfach klasse / listing-2.c < prev    next >
C/C++ Source or Header  |  1995-03-09  |  1KB  |  58 lines

  1. /* © 1995 by C. Marschner
  2.  * Zeigt die Verwendung von new und delete mit der Ausnahme-
  3.  * behandlung. Schalter »Exceptions« und »Alle Templates«
  4.  * in den Compiler-Einstellungen müssen angeschaltet sein. */
  5.  
  6. #include <stream.h>
  7. #include <string.h>
  8. #include <pragma/exec_lib.h>
  9. #include <exec/memory.h>
  10. #include <classes/exceptions/exceptions.h>
  11.  
  12. template <class T> 
  13. class Mem {
  14.     T* mem;  int realsize;
  15. public:
  16.     Mem(int sz) throw(MemoryX) : realsize(sizeof(T)*sz) { 
  17.         mem = new T[sz]; 
  18.         if(!mem) throw MemoryX(realsize);
  19.         cout << realsize << " Bytes alloziiert\n";
  20.     }
  21.     operator T*() { return mem; }
  22.     ~Mem() { cout << "Lösche "<< realsize << " Bytes\n";
  23.                 delete[] mem; }
  24. };
  25.  
  26. void allocstring(int size) {
  27.     Mem<long> tmp(10);  // wird bei Fehler destruiert 
  28.     Mem<char> str(size);
  29.     strcpy(str, "Hello, World\n");
  30.     char *s = str;  // wegen Mehrdeutigkeit bei cout
  31.     cout << s;
  32. }
  33.  
  34. void main() {
  35.     cout << AvailMem(MEMF_TOTAL) << " frei\n";
  36.     try {
  37.         allocstring(256);
  38.         allocstring(33554432);  // Haben Sie 32 MB?
  39.     } catch(MemoryX mx) {
  40.         cout << "Allokation fehlgeschlagen: " <<
  41.                 mx.size() << " Bytes\n";
  42.         cout << AvailMem(MEMF_TOTAL) << " frei\n";
  43.     }
  44. }
  45.  
  46. /* Ausgabe:
  47. 9436160 frei    (z.B.)
  48. 40 Bytes alloziiert
  49. 256 Bytes alloziiert
  50. Hello, World
  51. Lösche 256 Bytes
  52. Lösche 40 Bytes
  53. 40 Bytes alloziiert
  54. Lösche 40 Bytes
  55. Allokation fehlgeschlagen: 33554432 Bytes
  56. 9436160 frei (z.B.)
  57. */
  58.